#pragma once

#include <vex/core/make_raw_handle.h>
#include <vex/iterable/implementation/range_default_impl.h>

namespace vex { namespace iterable {

    /// Creates a instance of a range contract using information encoded in TRange
    template <class TRange> auto make_raw_range(TRange && p_range) 
        -> implementation::range_default_impl<TRange>*
    {
        return core::make_raw_handle< implementation::range_default_impl<TRange> >(
            std::forward<TRange>(p_range));
    }
}}